package com.rybbaby.tss.front.tssStudent.service;

import com.google.common.collect.ImmutableMap;
import com.rybbaby.tss.core.web.service.IBaseService;
import com.rybbaby.tss.front.tssAppUser.entity.TssAppUser;
import com.rybbaby.tss.front.tssClasses.entity.TssClasses;
import com.rybbaby.tss.front.tssStudent.entity.TssStudent;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @author 雷春琼
 * @description 客户表数据库操作服务接口
 * @createDate 2017-08-09 下午2:48:34
 */
public interface ITssStudentService extends IBaseService<TssStudent> {
    /**
     * 新增编辑客户
     *
     * @param adminUserId
     * @param entity
     */
    Boolean saveOrUpdate(String adminUserId, String pertainRelationList, TssStudent entity) throws Exception;

    /**
     * 支持批量修改客户状态以及名单状态
     *
     * @param immutableMap
     * @param ids
     * @return
     */
    Integer updateListStatusOrStatusByIds(ImmutableMap immutableMap, String adminUserId, String ids);

    /**
     * 查找用户
     *
     * @param name
     * @return
     */
    List<TssStudent> findStudentByName(String name) throws Exception;

    /**
     * 根据id获取会员基本详情
     *
     * @param id
     * @return
     */
    Map<String, Object> getStudentDetailById(String id);

    /**
     * 根据id修改参数
     *
     * @param map
     * @param id
     * @return
     */
    Integer updateParameterById(Map<String, Object> map, String id);

    /**
     * 本日新增/续报亲子.过度会员数量统计
     *
     * @return
     */
    List<Map<String, Object>> findTodayStudentByType(String adminUserIds);

    /**
     * 本月新增/续报亲子.过度会员数量统计
     *
     * @return
     */
    List<Map<String, Object>> findMonthStudentByType(String adminUserIds);


    /**
     * 导出数据相关抽象方法
     * */

    /**
     * 根据id数组查询student集合
     */
    List<TssStudent> getStudentListById(List<String> stuIdList);

    /**
     * 查询所有用户信息
     */
    List<TssStudent> getAllStudentList();

    /**
     * 根据联系电话查询student集合
     */
    List<TssStudent> findStudentByContactPhone(String contactPhone) throws Exception;

    /**
     * 客户转会员
     *
     * @param id
     * @return
     */
    Integer updateStudentIsMember(String id);


    /**
     * 根据手机号查询客户信息
     *
     * @param contractPhone
     * @return
     */
    Boolean findBycontractPhone(String contractPhone, String schoolId,String name);

    /**
     * 自动查询关联园所
     *
     * @param contactPhone
     * @return
     */
    List<Map<String, Object>> associatedPark(String contactPhone);

    /**
     * 根据二维码查询用户
     *
     * @param quickMark
     * @return
     */
    List<TssStudent> findByQuickMark(String quickMark) throws Exception;

    /**
     * 获取某以班级下的所有学生
     *
     * @param classId 班级Id
     * @return
     */
    List<TssStudent> getStudentsByClassId(String classId);

    /**
     * App端新增宝宝
     *
     * @param appUser    App端用户对像
     * @param relation   App端用户与宝宝的关系
     * @param tssStudent 宝宝对象
     * @return
     */
    Serializable addBaby(TssAppUser appUser, Integer relation, TssStudent tssStudent);
}
